<!DOCTYPE HTML>
<html>
<head>
<title>If (表达式) | AutoHotkey</title>
<meta name="description" content="The &quot;if (expression)&quot; statement specifies one or more statements to execute if an expression evaluates to true." />
<meta name="ahk:equiv-v2" content="commands/If.htm" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>If (表达式)</h1>
<p>指定在<a href="../Variables.htm#Expressions">表达式</a>计算结果为 true(真) 时执行的一个或多个<a href="../Concepts.htm#statement">语句</a>.</p>
<pre class="Syntax"><span class="func">If</span> (<i>表达式</i>)
{
    <i>语句</i>
}
</pre>

<h2>备注</h2>
<p>包含表达式的 <em>If</em> 语句通常通过将表达式括在括号中来区别于<a href="IfEqual.htm">传统-If 语句</a>(如 <code>If FoundColor != Blue</code>). 但是, 这并不是严格要求的, 因为任何不匹配<a href="../Language.htm#legacy-if">传统 if 模式</a>的 <em>If</em> 语句都假定为包含表达式. 特别地, 以下也是编写 <em>If (表达式)</em> 的常用方法:</p>
<ul>
   <li>以开括号开始, 但不完全包围表达式: <code>if (x &gt; 0) and (y &gt; 0)</code></li>
   <li>以<a href="../Functions.htm">函数调用</a>开始: <code>if InStr(a, b)</code></li>
   <li>以<a href="../Variables.htm#Operators">运算符</a>开始(如 <code>not</code> 或 <code>!</code>): <code>if !MyVar</code></li>
 </ul>
 <p><strong>已知限制:</strong> 由于历史原因, <em>If (表达式)</em> 实际接受<a href="../Language.htm#numeric-parameters">数字参数</a>而不是纯表达式. 例如, <code>if %MyVar%</code> 等同于 <code>if MyVar</code>. 这可以通过始终将表达式括在括号中来避免.</p>
<p>如果 <em>If</em> 语句中表达式的计算结果为 true(即除空字符串和数值 0 以外的任何结果), 那么执行 if 语句下的行或<a href="Block.htm">区块</a>. 否则如果有相应的 <a href="Else.htm">Else</a> 语句, 则会跳到 else 下的行或区块执行.</p>
<p>如果 <em>If</em> 拥有多行, 那么这些行必须用大括号括起来(创建一个<a href="Block.htm">区块</a>). 但是, 如果只有一行属于 <em>If</em>, 则大括号是可选的. 请参阅此页面底部的示例.</p>
<p><code>if</code> 关键字与后面的左括号之间的空格可有可无, 比如这样写 <code>if(expression)</code> 也是完全一样的.</p>
<p id="otb">One True Brace(OTB) 风格可用于表达式形式的 <em>If</em> 语句中(但不能用于<a href="IfEqual.htm">传统的 If 语句</a>). 例如:</p>
<pre>if (x &lt; y) {
    <em>; ...</em>
}
if WinExist(&quot;Untitled - Notepad&quot;) {
    WinActivate
}
if IsDone {
    <em>; ...</em>
} else {
    <em>; ...</em>
}</pre>
<p>与 <em>If</em> 语句不同, <a href="Else.htm">Else</a> 语句支持任何类型的语句紧跟在其右边.</p>
<p>相关提示, 语句 <a href="IfBetween.htm">if var [not] between LowerBound and UpperBound</a> 判断变量是否在两个值之间, 而 <a href="IfIn.htm">if var [not] in value1,value2</a> 可以用来判断变量内容是否存在于值列表中.</p>

<h2>相关</h2>
<p><a href="../Variables.htm#Expressions">表达式</a>, <a href="SetExpression.htm">赋值表达式(:=)</a>, <a href="IfIn.htm">if var in/contains</a>, <a href="IfBetween.htm">if var between</a>, <a href="IfInString.htm">IfInString</a>, <a href="Block.htm">区块</a>, <a href="Else.htm">Else</a>, <a href="While.htm">While 循环</a></p>

<h2>示例</h2>
<div class="ex" id="ExBasic">
<p><a href="#ExBasic">#1</a></p>
<pre>if (A_Index &gt; 100)
    return

if (A_TickCount - StartTime &gt; 2*MaxTime + 100)
{
    MsgBox Too much time has passed.
    ExitApp
}

if (Color = "Blue" or Color = "White")
{
    MsgBox The color is one of the allowed values.
    ExitApp
}
else if (Color = "Silver")
{
    MsgBox Silver is not an allowed color.
    return
}
else
{
    MsgBox This color is not recognized.
    ExitApp
}</pre>
</div>

<div class="ex" id="ExMultiStatement">
<p><a href="#ExMultiStatement">#2</a>: 单个<a href="../Variables.htm#comma">多语句</a>行不需要用大括号括起来.</p>
<pre>MyVar := 3
if (MyVar &gt; 2)
    MyVar++, MyVar := MyVar - 4, MyVar .= " test"
MsgBox % MyVar  <em>; Shows "0 test".</em>
</pre>
</div>

</body>
</html>